package com.rock.sys.controller;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.eova.common.utils.xx;
import com.eova.common.utils.io.FileUtil;
import com.eova.config.EovaConst;
import com.eova.widget.upload.UploadController;
import com.eova.widget.upload.UploadController.FileStatus;
import com.jfinal.core.NotAction;
import com.jfinal.kit.LogKit;
import com.jfinal.upload.UploadFile;

/**
 * 上传组件（本地存储+本地服务访问/attachment）
 * 
 * @author jadison
 * 
 */
public class UploadRockLocalController extends UploadController {

	
	/**
	 * 通用上传文件
	 * @param fileDir 指定基本路径
	 * @param type 类型；1-图片，2-文件
	 * @param name 收到的文件名，部分控件不支持送文件名则不用送
	 * @return
	 */
	@Override
	public FileStatus upload( String fileDir,int type,String name) {
		if(fileDir == null){//未指定路径，则从req参数提取
			fileDir = getPara("filedir");
			if (xx.isEmpty(fileDir)) {
				fileDir = xx.getConfig("eova_upload_temp");
			}
//			 附件存储目录
			 String baseDir = File.separator + "attachment";
			 fileDir = baseDir + fileDir;
		}
		
		String fileName = "";
		boolean isDelete = true;
		UploadFile file = null;
		String srcName = null;
		String domain = null;
		try {
			if (name != null) {
				// 按参数名获取上传文件
				file = getFile(name, fileDir);
			} else {
				// 获取第一个上传文件
				List<UploadFile> files = getFiles(fileDir);
				if (xx.isEmpty(files)) {
					return new FileStatus(false,"请选择一个文件！");
				}
				file = files.get(0);
			}
			
			
			// 上传到/upload 目录（也有可能冲突）
			if (xx.isEmpty(file)) {
				return new FileStatus(false,"请选择一个文件！");
			}
			
			int limit = 5120;
			
			if(type == 1){
				limit = EovaConst.UPLOAD_IMG_SIZE;
				domain = xx.getConfig("domain_img");
			}else if(type == 2){
				limit = EovaConst.UPLOAD_FILE_SIZE;
				domain = xx.getConfig("domain_file");
			}
			
			// 大小限制
			if (FileUtil.checkFileSize(file.getFile(), limit)) {
					String msg = "图片大小不能超过"+limit/(1024)+"M";
					return new FileStatus(false,msg);
			}
			// 文件后缀
			if(type == 1)
				if (!FileUtil.checkFileType(file.getFile().getPath(), true)) {
					return new FileStatus(false,"请勿上传非法类型文件");
				}
			else if(type == 2)
				if (!FileUtil.checkFileType(file.getFile().getPath(), false)) {
					return new FileStatus(false,"请勿上传非法类型文件");
				}

			// 获取文件名(文件原名)
			srcName = file.getFileName();
			// 获取文件后缀
			String suffix = FileUtil.getFileType(srcName);
			// 创建新的随机文件名（也有可能冲突）
			fileName = System.currentTimeMillis() + suffix;

			// 新文件 Path
			String path = file.getUploadPath() + File.separator + fileName;

			FileUtil.rename(file.getFile().getPath(), path);
			System.out.println(file.getFile().getPath());
			System.out.println(path);

			//存储的文件名称，直接带访问域名
			fileName = xx.getConfig("domain_img") + fileDir.replace("\\", "/") +"/"+ fileName;
			
			isDelete = false;
			
		} catch (Exception e) {
			e.printStackTrace();
			return new FileStatus(false,"系统异常：文件上传失败,请稍后再试");
		} finally {
			if (isDelete) {
				// 强制删除已上传的文件(如果还存在)
				FileUtil.delete(file.getFile());
				LogKit.info("图片回收");
			}
		}
		
		return new FileStatus(true,"上传成功",srcName,fileName,xx.getConfig("static_root"),domain);
	}
	
}